#include "disk.h"
#include "fs.h"
#include "file_op.h"
#include <stdio.h>
#include <string.h>

void test_create_and_rw() {
    printf("\n[TEST] 创建文件并读写内容...\n");

    my_mkdir("/a");
    my_create("/a/hello.txt");

    my_write("/a/hello.txt", "HelloWorld", strlen("HelloWorld") + 1);

    char buf[128];
    int n = my_read("/a/hello.txt", buf, sizeof(buf) - 1);
    buf[n] = '\0';
    printf("读取内容: %s\n", buf);
}

void test_stat_and_rename() {
    printf("\n[TEST] 文件 stat 与重命名...\n");

    my_stat("/a/hello.txt");
    my_rename("/a/hello.txt", "/a/renamed.txt");
    my_stat("/a/renamed.txt");
}

void test_delete_and_error_cases() {
    printf("\n[TEST] 删除与非法路径测试...\n");

    my_rm("/a/renamed.txt");
    my_rm("/a/notfound.txt");           // 不存在应报错
    my_rmdir("/");                      // 根目录禁止删除
    my_rmdir("/a");                     // 成功删除空目录
    my_stat("/a");                      // 应该失败
}

void test_inode_reuse() {
    printf("\n[TEST] inode 回收验证...\n");

    my_create("/file1.txt");
    int id1 = path_lookup("/file1.txt");
    my_rm("/file1.txt");

    my_create("/file2.txt");
    int id2 = path_lookup("/file2.txt");

    printf("file1 inode = %d, file2 inode = %d\n", id1, id2);
    if (id1 == id2) {
        printf("inode 被复用了\n");
    } else {
        printf("inode 未复用\n");
    }
}

int main() {
    disk_init();
    fs_format();
    fs_mount();

    test_create_and_rw();
    test_stat_and_rename();
    test_delete_and_error_cases();
    test_inode_reuse();

    disk_close();
    return 0;
}
